package br.unb.fga.view;

import java.awt.Color;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Locale;
import java.util.ResourceBundle;

import javax.swing.*;

import br.unb.fga.control.NaoEncontradoException;
import br.unb.fga.model.Esquema;
import br.unb.fga.view.Menu;

public class Sigati extends JFrame implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	
	private JMenuBar menu;
	private JPanel painelCarregar;
	private FileDialog fdAbrir,fdSalvar;
	private ResourceBundle recursos = ResourceBundle.getBundle("intercionalizacao", Locale.FRANCE);
	private Esquema esquema;
	
	public static void main(String[] args) { 
		JFrame janela = new Sigati();
		janela.setVisible(true);
		janela.setUndecorated(true);
		janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
	}
	
	public Sigati(){
		this.setTitle("SIGATI REMAKE");
		this.setBounds(250,10,1000,650);
		this.setResizable(false);
		this.getContentPane().setBackground(new Color(150,150,150));
		this.getContentPane().setLayout(new FlowLayout());

		this.menu = new Menu();
		this.painelCarregar = new ArquivoFrame();

		((Menu) this.menu).getMenuEsquema().addActionListener(this);
		((Menu) this.menu).getMenuIntercionalizar().addActionListener(this);
		((Menu) this.menu).getMiAbrir().addActionListener(this);
		((Menu) this.menu).getMiSalvar().addActionListener(this);
		((Menu) this.menu).getMiPT().addActionListener(this);
		((Menu) this.menu).getMiEN().addActionListener(this);
		((Menu) this.menu).getMiFR().addActionListener(this);
		
		((ArquivoFrame) this.painelCarregar).getBtMapear().addActionListener(this);

		fdAbrir = new FileDialog(this,"Abrir arquivo",FileDialog.LOAD);
		fdSalvar = new FileDialog(this,"Salvar arquivo",FileDialog.SAVE);

		this.add(painelCarregar);
		this.setJMenuBar(menu);
	}
	public void actionPerformed(ActionEvent e){

		String nome_do_arquivo,mapeado="";
		
		if(e.getSource().equals(((Menu) this.menu).getMiAbrir())){
			try{
				fdAbrir.setVisible(true);
				if(fdAbrir.getFile().equals("")) return;
				nome_do_arquivo = fdAbrir.getDirectory() + fdAbrir.getFile();
				FileReader in = new FileReader(nome_do_arquivo);
				String s = "";
				int i = in.read();
				while(i!=-1){
					s+=(char)i;
					i = in.read();
				}
				((ArquivoFrame) this.painelCarregar).getTextArea1().setText(s);
				in.close();
				((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Arquivo aberto com sucesso!");
			}
			catch(IOException erro){
				((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Erro ao abrir o arquivo!");
			}
		}
		if(e.getSource().equals(((Menu) this.menu).getMiSalvar())){
			if(!(mapeado==""))
				try{
					fdSalvar.setVisible(true);
					if(fdSalvar.getFile().equals("")) return;
					nome_do_arquivo = fdSalvar.getDirectory() + fdSalvar.getFile();
					FileWriter out = new FileWriter(nome_do_arquivo);
					out.write(mapeado);
					out.close();
					((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Arquivo gravado com sucesso!");
				}
				catch(IOException erro){
					((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Erro ao gravar o arquivo!");
				}
			else{
				((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Nada foi mapeado ainda!");
			}
		}
		

		if(e.getSource().equals(((Menu) this.menu).getMiPT())){
			this.recursos = ResourceBundle.getBundle("intercionalizacao", new Locale("pt","BR"));
			
		}
		if(e.getSource().equals(((Menu) this.menu).getMiEN())){
			this.recursos= ResourceBundle.getBundle("intercionalizacao", Locale.US);
			
		}
		if(e.getSource().equals(((Menu) this.menu).getMiFR())){
			this.recursos= ResourceBundle.getBundle("intercionalizacao", Locale.FRANCE);
		}
		

		if(e.getSource().equals(((ArquivoFrame) this.painelCarregar).getBtMapear())){
			esquema = new Esquema();
			esquema.setRecursosCore(recursos);
			try {
				mapeado = esquema.mapear(((ArquivoFrame) this.painelCarregar).getTextArea1().getText());
			} catch (NaoEncontradoException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			((ArquivoFrame) this.painelCarregar).getTfTexto().setText("Arquivo mapeado gravado com sucesso!");
			
		}
	}
}
